package com.minimalist.common.entity.lindi.po;

import com.minimalist.common.config.mybatis.InsertFullColumnHandler;
import com.minimalist.common.config.mybatis.UpdateFullColumnHandler;
import com.minimalist.common.config.mybatis.bo.BaseEntity;
import com.mybatisflex.annotation.Table;
import java.io.Serial;
import java.io.Serializable;
import java.sql.Timestamp;

/**
 * 林地指标交易平台_补贴申请 实体类。
 *
 * @author 11987
 * @since 2025-06-09
 */
@Table(value = "LINDI_SUBSIDY_APPLICATION", onInsert = InsertFullColumnHandler.class, onUpdate = UpdateFullColumnHandler.class)
public class LindiSubsidyApplication extends BaseEntity implements Serializable{

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 企业账号ID
     */
    private Long enterpriseAccountId;

    /**
     * 项目名称
     */
    private String projectName;

    /**
     * 项目地址
     */
    private String projectAddress;

    /**
     * 补贴申领面积(亩)
     */
    private String amount;

    /**
     * 项目简介
     */
    private String projectDescription;

    /**
     * 验收时间
     */
    private Timestamp acceptDate;

    /**
     * 补贴状态
     */
    private String subsidyStatus;

    /**
     * 补贴申请ID
     */
    private Long subsidyApplicationId;

    // 无参构造函数
    public LindiSubsidyApplication() {
    }

    // 全参构造函数
    public LindiSubsidyApplication(Long enterpriseAccountId, String projectName, String projectAddress, String amount, String projectDescription, Timestamp acceptDate, String subsidyStatus, Long subsidyApplicationId) {
        this.enterpriseAccountId = enterpriseAccountId;
        this.projectName = projectName;
        this.projectAddress = projectAddress;
        this.amount = amount;
        this.projectDescription = projectDescription;
        this.acceptDate = acceptDate;
        this.subsidyStatus = subsidyStatus;
        this.subsidyApplicationId = subsidyApplicationId;
    }

    // Getter和Setter方法
    public Long getEnterpriseAccountId() {
        return enterpriseAccountId;
    }

    public void setEnterpriseAccountId(Long enterpriseAccountId) {
        this.enterpriseAccountId = enterpriseAccountId;
    }

    public String getProjectName() {
        return projectName;
    }

    public void setProjectName(String projectName) {
        this.projectName = projectName;
    }

    public String getProjectAddress() {
        return projectAddress;
    }

    public void setProjectAddress(String projectAddress) {
        this.projectAddress = projectAddress;
    }

    public String getAmount() {
        return amount;
    }

    public void setAmount(String amount) {
        this.amount = amount;
    }

    public String getProjectDescription() {
        return projectDescription;
    }

    public void setProjectDescription(String projectDescription) {
        this.projectDescription = projectDescription;
    }

    public Timestamp getAcceptDate() {
        return acceptDate;
    }

    public void setAcceptDate(Timestamp acceptDate) {
        this.acceptDate = acceptDate;
    }

    public String getSubsidyStatus() {
        return subsidyStatus;
    }

    public void setSubsidyStatus(String subsidyStatus) {
        this.subsidyStatus = subsidyStatus;
    }

    public Long getSubsidyApplicationId() {
        return subsidyApplicationId;
    }

    public void setSubsidyApplicationId(Long subsidyApplicationId) {
        this.subsidyApplicationId = subsidyApplicationId;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        if (!super.equals(o)) return false;
        LindiSubsidyApplication that = (LindiSubsidyApplication) o;
        return java.util.Objects.equals(enterpriseAccountId, that.enterpriseAccountId) &&
               java.util.Objects.equals(projectName, that.projectName) &&
               java.util.Objects.equals(projectAddress, that.projectAddress) &&
               java.util.Objects.equals(amount, that.amount) &&
               java.util.Objects.equals(projectDescription, that.projectDescription) &&
               java.util.Objects.equals(acceptDate, that.acceptDate) &&
               java.util.Objects.equals(subsidyStatus, that.subsidyStatus) &&
               java.util.Objects.equals(subsidyApplicationId, that.subsidyApplicationId);
    }

    @Override
    public int hashCode() {
        return java.util.Objects.hash(super.hashCode(), enterpriseAccountId, projectName, projectAddress, amount, projectDescription, acceptDate, subsidyStatus, subsidyApplicationId);
    }

    @Override
    public String toString() {
        return "LindiSubsidyApplication{" +
               "enterpriseAccountId=" + enterpriseAccountId +
               ", projectName='" + projectName + '\'' +
               ", projectAddress='" + projectAddress + '\'' +
               ", amount='" + amount + '\'' +
               ", projectDescription='" + projectDescription + '\'' +
               ", acceptDate=" + acceptDate +
               ", subsidyStatus='" + subsidyStatus + '\'' +
               ", subsidyApplicationId=" + subsidyApplicationId +
               "} " + super.toString();
    }

    // Builder类
    public static Builder builder() {
        return new Builder();
    }

    public static class Builder {
        private Long enterpriseAccountId;
        private String projectName;
        private String projectAddress;
        private String amount;
        private String projectDescription;
        private Timestamp acceptDate;
        private String subsidyStatus;
        private Long subsidyApplicationId;

        public Builder enterpriseAccountId(Long enterpriseAccountId) {
            this.enterpriseAccountId = enterpriseAccountId;
            return this;
        }

        public Builder projectName(String projectName) {
            this.projectName = projectName;
            return this;
        }

        public Builder projectAddress(String projectAddress) {
            this.projectAddress = projectAddress;
            return this;
        }

        public Builder amount(String amount) {
            this.amount = amount;
            return this;
        }

        public Builder projectDescription(String projectDescription) {
            this.projectDescription = projectDescription;
            return this;
        }

        public Builder acceptDate(Timestamp acceptDate) {
            this.acceptDate = acceptDate;
            return this;
        }

        public Builder subsidyStatus(String subsidyStatus) {
            this.subsidyStatus = subsidyStatus;
            return this;
        }

        public Builder subsidyApplicationId(Long subsidyApplicationId) {
            this.subsidyApplicationId = subsidyApplicationId;
            return this;
        }

        public LindiSubsidyApplication build() {
            return new LindiSubsidyApplication(enterpriseAccountId, projectName, projectAddress, amount, projectDescription, acceptDate, subsidyStatus, subsidyApplicationId);
        }
    }

}
